//
//  LZTHomeViewController.swift
//  LZTWeibo
//
//  Created by Yin jianxun on 16/8/10.
//  Copyright © 2016年 YinJianxun. All rights reserved.
//

import UIKit

//cell的重用标识
private let LZTHomeViewCellId = "LZTHomeViewCellId"

class LZTHomeViewController: LZTVisitorViewController {
    
    //创建ViewModel的对象
    private lazy var statusListViewModel: LZTStatusListViewModel = LZTStatusListViewModel()
    
    //系统自带刷新
    let refreshControl = LZTRefreshControl()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !isLogin {
            visitorView?.setupVisitorViewInfo(nil, title: nil)
            // 如果没有登录的话设置未登录信息和logo 也就没有必要再加载数据了 所以return
            return
        }
        
        //设置显示数据 cell
        setupTableViewInfo()
        
        //通过Vm请求数据
        loadData()
    }
    
    //展示tableView信息
    func setupTableViewInfo() {  
        
        //注册cell
        tableView.registerClass(LZTStatusCell.self, forCellReuseIdentifier: LZTHomeViewCellId)
        //设置代理
        tableView.dataSource = self
        tableView.delegate = self
        //设置cell 高度 - 动态设定cell的行高(contentView的高度决定)
        tableView.rowHeight = UITableViewAutomaticDimension
        //搭配：设置预估行高,最好接近真实行高
        tableView.estimatedRowHeight = 200
        //设置footView
        tableView.tableFooterView = activityView
        
        //添加 刷新事件
        refreshControl.addTarget(self, action: #selector(LZTHomeViewController.refreshAction), forControlEvents: UIControlEvents.ValueChanged)
        //添加到tableView
        tableView.addSubview(refreshControl)
        //去掉cell之间的 线
        tableView.separatorStyle = .None
    }
    
    //下拉刷新 加载数据
    func refreshAction() {
        
        loadData()
        
    }
    
    //网络指示器 菊花
    private lazy var activityView: UIActivityIndicatorView = {
        
        let acView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle
        .WhiteLarge)
        acView.color = AppThemeColor
        return acView
    }()
    
}

extension LZTHomeViewController: UITableViewDataSource,UITableViewDelegate {
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.dataArray.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        //将cell强转成 自定义的cell
        let cell = tableView.dequeueReusableCellWithIdentifier(LZTHomeViewCellId, forIndexPath: indexPath) as! LZTStatusCell
        
        //viewModel
        cell.statusViewModel = statusListViewModel.dataArray[indexPath.row]
        
        return cell
    }
    
    //delegate
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        //最初始加载的20条以后的数据
        //如果是最后一个cell 而且网络加载指示器-菊花没有动画
        if indexPath.row + 1 == statusListViewModel.dataArray.count && !activityView.isAnimating() {
            
            //设置动画
            activityView.startAnimating()
            
            //请求数据 刷新或者上啦加载更多用
            loadData()
        }
        
    }
}

extension LZTHomeViewController {
    
    func loadData() {
        
        //通过Vm请求数据
        //参数1：true代表上啦加载更多 false：下拉刷新
        statusListViewModel.loadData(activityView.isAnimating()) { (isSuccess) in
            
            //停止动画 数据加载完成后
            self.endRefreshing()
            
            if !isSuccess {
                print("请求数据 失败")
                return
            }
            //刷新UI
            self.tableView .reloadData()
            
        }
    }
    
    //结束动画
    func endRefreshing() {
        self.activityView.stopAnimating()
        
        self.refreshControl.endRefreshing()
    }
    
}



